import regs from "./regs";

class ValidateTemplate {
  /** @type {{[key:string]: RegExp}} regular-rules */
  _regs;

  constructor() {
    this._regs = {
      ...regs,
    };
  }

  /**
   * 通过正则校验判断value是否合法
   * @param {RegExp} r 规则
   * @param {string | number | [] | {}} val 当前值
   */
  _checkByRule = (r, val) => {
    const inValids = [null, NaN, undefined];
    if (inValids.includes(val)) {
      return false;
    }
    if (!r.test(val)) {
      return false;
    }
    return true;
  };
  /**
   * 判断字符串是否为空
   */
  checkIsNull(errorMsg = "null error") {
    return (rule, value, callback) => {
      value && value.length
        ? /** success callback */
          callback()
        : /** error callback */
          callback(new Error(errorMsg));
    };
  }
  /**
   * 使用rule-checking生成validate-callback
   */
  _checkRegCallback = (reg, errorMsg = "an error occur") => {
    return (rule, value, callback) => {
      return this._checkByRule(reg, value)
        ? callback()
        : callback(new Error(errorMsg));
    };
  };
}

export default ValidateTemplate;
